Meta-analysis of the Interoceptive Accuracy Scale

Study 2

Code
library(tidyverse)
library(easystats)
library(patchwork)
library(lavaan)
library(ggraph)
library(tidySEM)
library(EGAnet)

Data Preparation

Code
load("../data/data.RData")
load("../data/scores.RData")

df1a <- cbind(data$df1a, scores$sample1a)
df1b <- cbind(data$df1b, scores$sample1b)
df2 <- cbind(data$df2, scores$sample2)
df3 <- cbind(data$df3, scores$sample3)
df4 <- cbind(data$df4, scores$sample4)
df5 <- cbind(data$df5, scores$sample5)
df6 <- cbind(data$df6, scores$sample6)
df7a <- cbind(data$df7a, scores$sample7a)
df7b <- cbind(data$df7b, scores$sample7b)
df7c <- cbind(data$df7c, scores$sample7c)
df8a <- cbind(data$df8a, scores$sample8a)
df8b <- cbind(data$df8b, scores$sample8b)
df9 <- cbind(data$df9, scores$sample9)
df10a <- cbind(data$df10a, scores$sample10a)
df10b <- cbind(data$df10b, scores$sample10b)

vars_intero <- names(select(scores$sample1a, -Sample, -starts_with("CFA_"), -starts_with("EGA")))
# vars_cfa <- names(select(scores$sample1a, -Sample, -starts_with("EGA")))
# vars_intero <- vars_cfa[vars_cfa != "CoughSneeze"]

# names(df1a)
# names(df1b)
# names(df2)  # BPQ, BVAQ, MAIA, ICQ, TAS
# names(df3)  # TAS, BPQ
# names(df4)  # BAQ, BPQ, MAIA, BRS, PBCS
# names(df5)  
# names(df6)  # IATS, SSS, GAD, PHQ2
# names(df7a)  # MAIA, STAI, FFMQ, NEOFFI, CES
# names(df7b)  # MAIA, STAI, BPQ, PHQ15, PHQ9
# names(df7c)  # TAS, BPQ, ASI, BDI, CI (?), IASV (?), IASP (?)
# names(df8a)  # EDI (eating disorder inventory?), BPQ
# names(df8b)  # TAS, PHQ15, PHQ9
# names(df9)  # BFI, STQ (?), EQ, ECR, TEAQ, UCLA, TACSEN
# names(df10a)  # MAIA, PHQ4, PI, LIE, IPIP, PID, SPQ
# names(df10b)  # BDI, STAI, PHQ4

Empirical Scores vs. Model-based

Code
vars_scores <- names(select(scores$sample1a, -Sample))
df_scores <- rbind(
  select(df1a, all_of(vars_scores)),
  select(df1b, all_of(vars_scores)),
  select(df2, all_of(vars_scores)),
  select(df3, all_of(vars_scores)),
  select(df4, all_of(vars_scores)),
  select(df5, all_of(vars_scores)),
  select(df6, all_of(vars_scores)),
  select(df7a, all_of(vars_scores)),
  select(df7b, all_of(vars_scores)),
  select(df7c, all_of(vars_scores)),
  select(df8a, all_of(vars_scores)),
  select(df8b, all_of(vars_scores)),
  select(df9, all_of(vars_scores)),
  select(df10a, all_of(vars_scores)),
  select(df10b, all_of(vars_scores))
)

order <- c("WindBurp", "CoughSneeze", "MusclesPain", "ItchBruise", "HeartBreathing", "HungryThirsty", "UrinateDefecate")

correlation::correlation(select(df_scores, -all_of(vars_intero)),
                         select(df_scores, all_of(vars_intero))) |> 
  mutate(val = paste0(insight::format_value(r), format_p(p, stars_only = TRUE))) |>
    mutate(Parameter2 = fct_relevel(Parameter2, rev(order)),
           Parameter1 = fct_relevel(Parameter1, paste0("CFA_", order), "EGA3", "EGA2", "EGA4", "EGA1")) |>
    ggplot(aes(x = Parameter1, y = Parameter2)) +
    geom_tile(aes(fill = r), color = "white") +
    geom_text(aes(label = val), size = 3) +
    labs(title = "Correlation Matrix") +
    scale_fill_gradient(low="blue", high="red", limit = c(0.1, 1), guide = guide_colourbar(ticks = FALSE)) +
    theme_minimal() +
    theme(
      legend.title = element_blank(),
      axis.title.x = element_blank(),
      axis.title.y = element_blank(),
      axis.text.x = element_text(angle = 45, hjust = 1)
    )

Very strong correlations between empirical scores (i.e., average of pairs of items) and dimensions derived from models. Even EGA components capture pairs or groupings of pairs of items.

Demographics

Gender

Code
make_diff <- function(df, vars, component=NA) {
  df <- select(df, all_of(c("Gender", "Sample", vars)))
  df <- df[complete.cases(df), ]
  dat <- data.frame()
  for (resp in vars) {
    f <- as.formula(paste0(resp, "~ Gender"))
    d <- filter(df, Gender %in% c("Male", "Female")) |>
      mutate(Gender = fct_relevel(Gender, "Male", "Female"))
    dat <- effectsize::cohens_d(f, data=d) |>
      as.data.frame() |>
      mutate(var_Correlate = "Gender", 
             var_Interoception = resp,
             p=t.test(f, data=d)$p.val) |>
      rbind(dat)
  }

  dat$r <- effectsize::d_to_r(dat$Cohens_d, n1=sum(df$Gender=="Male"), n2=sum(df$Gender=="Female"))
  dat$CI_low <- effectsize::d_to_r(dat$CI_low, n1=sum(df$Gender=="Male"), n2=sum(df$Gender=="Female"))
  dat$CI_high <- effectsize::d_to_r(dat$CI_high, n1=sum(df$Gender=="Male"), n2=sum(df$Gender=="Female"))
  dat$Sample <- unique(df$Sample)
  dat$Component <- component
  select(dat, -Cohens_d)
}



rez_gender <- rbind(
  make_diff(df1a, vars_intero, component="Demographic"),
  make_diff(df1b, vars_intero, component="Demographic"),
  make_diff(df2, vars_intero, component="Demographic"),
  make_diff(df3, vars_intero, component="Demographic"),
  # make_diff(df4, vars_intero, component="Demographic"),
  # make_diff(df5, vars_intero, component="Demographic"),
  make_diff(df6, vars_intero, component="Demographic"),
  make_diff(df7a, vars_intero, component="Demographic"),
  make_diff(df7b, vars_intero, component="Demographic"),
  make_diff(df7c, vars_intero, component="Demographic"),
  make_diff(df8a, vars_intero, component="Demographic"),
  make_diff(df8b, vars_intero, component="Demographic"),
  make_diff(df9, vars_intero, component="Demographic"),
  make_diff(df10a, vars_intero, component="Demographic"),
  make_diff(df10b, vars_intero, component="Demographic")
) |>
  mutate(var_Correlate = "Gender (Male vs. Female)")



display_sig <- function(rez) {
  rez |> 
    arrange(var_Interoception, var_Correlate, desc(abs(r))) |> 
    mutate(CI = insight::format_ci(CI_low, CI_high, ci=CI)) |>
    select(Sample, var_Correlate, var_Interoception, r, CI, p) |>
    gt::gt() |> 
    gt::data_color(
      columns = r,
      rows = p < 0.5,
      method = "numeric",
      palette = c("blue", "red")
    ) |> 
    gt::fmt_number(decimals=3) |> 
    gt::opt_stylize() |> 
    gt::opt_interactive(use_compact_mode = TRUE) 
}

display_sig(rez_gender)

Age

Code
make_cor <- function(df, vars, with = "Age", component=NA) {
  df <- select(df, all_of(c(with, "Sample", vars)))
  df <- df[complete.cases(df), ]
  
  dat <- data.frame()
  for (v in vars) {
    dat <- correlation::cor_test(df, v, with) |>
      rename(var_Interoception = Parameter1, var_Correlate = Parameter2) |>
      as.data.frame() |>
      rbind(dat)
  }

  dat$Sample <- unique(df$Sample)
  dat$Component <- component
  select(dat, -df_error, -t, -Method, -n_Obs)
}

rez_age <- rbind(
  make_cor(df1a, vars_intero, with = "Age", component="Demographic"),
  make_cor(df1b, vars_intero, with = "Age", component="Demographic"),
  make_cor(df2, vars_intero, with = "Age", component="Demographic"),
  make_cor(df3, vars_intero, with = "Age", component="Demographic"),
  # make_cor(df4, vars_intero, with = "Age", component="Demographic"),
  # make_cor(df5, vars_intero, with = "Age", component="Demographic"),
  make_cor(df6, vars_intero, with = "Age", component="Demographic"),
  make_cor(df7a, vars_intero, with = "Age", component="Demographic"),
  make_cor(df7b, vars_intero, with = "Age", component="Demographic"),
  make_cor(df7c, vars_intero, with = "Age", component="Demographic"),
  make_cor(df8a, vars_intero, with = "Age", component="Demographic"),
  make_cor(df8b, vars_intero, with = "Age", component="Demographic"),
  make_cor(df9, vars_intero, with = "Age", component="Demographic"),
  make_cor(df10a, vars_intero, with = "Age", component="Demographic"),
  make_cor(df10b, vars_intero, with = "Age", component="Demographic")
)


display_sig(rez_age)

Interoception

MAIA

Code
# names(df2)[str_detect(names(df2), "MAIA")]  
# names(df4)[str_detect(names(df4), "MAIA")] 
# names(df7a)[str_detect(names(df7a), "MAIA")]  
# names(df7b)[str_detect(names(df7b), "maia")] 
# names(df8a)[str_detect(names(df8a), "EDI")] 
# names(df10a)[str_detect(names(df10b), "MAIA")]


df4$MAIA_BL <- rowMeans(df4[grep("MAIA_BL", names(df4))])
df4$MAIA_TR <- rowMeans(df4[grep("MAIA_TR", names(df4))])
df4$MAIA_AR <- rowMeans(df4[grep("MAIA_AR", names(df4))])
df4$MAIA_SR <- rowMeans(df4[grep("MAIA_SR", names(df4))])
df4$MAIA_EA <- rowMeans(df4[grep("MAIA_EA", names(df4))])
df4$MAIA_NT <- rowMeans(df4[grep("MAIA_NT", names(df4))])


rez_maia <- rbind(
  make_cor(df2, vars_intero, with = "MAIA_AttentionReg", component="MAIA")  |>
    mutate(var_Correlate = "Attention Regulation"),
  make_cor(df2, vars_intero, with = "MAIA_BodyListening", component="MAIA") |>
    mutate(var_Correlate = "Listening"),
  make_cor(df2, vars_intero, with = "MAIA_BodyTrusting", component="MAIA") |>
    mutate(var_Correlate = "Trusting"),
  make_cor(df2, vars_intero, with = "MAIA_EmoAwareness", component="MAIA") |>
    mutate(var_Correlate = "Emotional Awareness"),
  make_cor(df2, vars_intero, with = "MAIA_NotDistracting", component="MAIA") |>
    mutate(var_Correlate = "Not Distracting"),
  make_cor(df2, vars_intero, with = "MAIA_Noticing", component="MAIA") |>
    mutate(var_Correlate = "Noticing"),
  make_cor(df2, vars_intero, with = "MAIA_NotWorrying", component="MAIA") |>
    mutate(var_Correlate = "Not Worrying"),
  make_cor(df2, vars_intero, with = "MAIA_SelfReg", component="MAIA") |>
    mutate(var_Correlate = "Self Regulation"),
  # df4
  make_cor(df4, vars_intero, with = "MAIA_BL", component="MAIA") |>
    mutate(var_Correlate = "Listening"),
  make_cor(df4, vars_intero, with = "MAIA_TR", component="MAIA") |>
    mutate(var_Correlate = "Trusting"),
  make_cor(df4, vars_intero, with = "MAIA_AR", component="MAIA") |>
    mutate(var_Correlate = "Attention Regulation"),
  make_cor(df4, vars_intero, with = "MAIA_SR", component="MAIA") |>
    mutate(var_Correlate = "Self Regulation"),
  make_cor(df4, vars_intero, with = "MAIA_EA", component="MAIA") |>
    mutate(var_Correlate = "Emotional Awareness"),
  make_cor(df4, vars_intero, with = "MAIA_NT", component="MAIA") |>
    mutate(var_Correlate = "Noticing"),
  # df7a
  make_cor(df7a, vars_intero, with = "mAIA_ATTENTION_REGULATION", component="MAIA") |>
    mutate(var_Correlate = "Attention Regulation"),
  make_cor(df7a, vars_intero, with = "MAIA_NOTICING", component="MAIA") |>
    mutate(var_Correlate = "Noticing"),
  make_cor(df7a, vars_intero, with = "MAIA_NON_DISTRACTING", component="MAIA") |>
    mutate(var_Correlate = "Not Distracting"),
  make_cor(df7a, vars_intero, with = "MAIA_NON_DISTRACTING", component="MAIA") |>
    mutate(var_Correlate = "Not Distracting"),
  make_cor(df7a, vars_intero, with = "MAIA_NOT_WORRYING", component="MAIA") |>
    mutate(var_Correlate = "Not Worrying"),
  make_cor(df7a, vars_intero, with = "MAIA_EMOTIONAL_AWARENESS", component="MAIA") |>
    mutate(var_Correlate = "Emotional Awareness"),
  make_cor(df7a, vars_intero, with = "MAIA_SELF_REGULATION", component="MAIA") |>
    mutate(var_Correlate = "Self Regulation"),
  make_cor(df7a, vars_intero, with = "MAIA_BODY_LISTENING", component="MAIA") |>
    mutate(var_Correlate = "Listening"),
  make_cor(df7a, vars_intero, with = "MAIA_TRUSTING", component="MAIA") |>
    mutate(var_Correlate = "Trusting"),
  
  # df7b
  make_cor(df7b, vars_intero, with = "maiaNotice", component="MAIA") |>
    mutate(var_Correlate = "Noticing"),
  make_cor(df7b, vars_intero, with = "maiaNonDistracting", component="MAIA") |>
    mutate(var_Correlate = "Not Distracting"),
  make_cor(df7b, vars_intero, with = "maiaNotWorrying", component="MAIA") |>
    mutate(var_Correlate = "Not Worrying"),
  make_cor(df7b, vars_intero, with = "maiaAttentionRegulation", component="MAIA") |>
    mutate(var_Correlate = "Attention Regulation"),
  make_cor(df7b, vars_intero, with = "maiaEmotionalAwareness", component="MAIA") |>
    mutate(var_Correlate = "Emotional Awareness"),
  make_cor(df7b, vars_intero, with = "maiaSelfRegulation", component="MAIA") |>
    mutate(var_Correlate = "Self Regulation"),
  make_cor(df7b, vars_intero, with = "maiaBodyListening", component="MAIA") |>
    mutate(var_Correlate = "Listening"),
  make_cor(df7b, vars_intero, with = "maiaTrusting", component="MAIA") |>
    mutate(var_Correlate = "Trusting"),
  
  # df10a
  make_cor(df10a, vars_intero, with = "MAIA_AttentionRegulation", component="MAIA")  |>
    mutate(var_Correlate = "Attention Regulation"),
  make_cor(df10a, vars_intero, with = "MAIA_BodyListening", component="MAIA") |>
    mutate(var_Correlate = "Listening"),
  make_cor(df10a, vars_intero, with = "MAIA_EmotionalAwareness", component="MAIA") |>
    mutate(var_Correlate = "Emotional Awareness"),
  make_cor(df10a, vars_intero, with = "MAIA_NotDistracting", component="MAIA") |>
    mutate(var_Correlate = "Not Distracting"),
  make_cor(df10a, vars_intero, with = "MAIA_Noticing", component="MAIA") |>
    mutate(var_Correlate = "Noticing"),
  make_cor(df10a, vars_intero, with = "MAIA_NotWorrying", component="MAIA") |>
    mutate(var_Correlate = "Not Worrying"),
  make_cor(df10a, vars_intero, with = "MAIA_SelfRegulation", component="MAIA") |>
    mutate(var_Correlate = "Self Regulation"),
  make_cor(df10a, vars_intero, with = "MAIA_Trusting", component="MAIA") |>
    mutate(var_Correlate = "Trusting")
)

display_sig(rez_maia)

Body Awareness

Code
# df3$BPQ_BodyAwareness <- -1*normalize(df3$BPQ_BodyAwareness)
# df3$BPQ_AutonomicReactivity <- -1*normalize(df3$BPQ_AutonomicReactivity)
# names(df2)[str_detect(names(df2), "BPQ")]  # BPQ_R_Supra and _Sub?
# names(df3)[str_detect(names(df3), "BPQ")]  
# names(df4)[str_detect(names(df4), "BPQ")]   # individual items 1-26
# names(df7b)[str_detect(names(df7b), "BPQ")]  # BPQ sum
# names(df8a)[str_detect(names(df8a), "BPQ")]  # individual items

df4$BPQ_A <- rowMeans(df4[str_detect(names(df4), "BPQ_")])
df4$BAQ <- rowMeans(df4[,str_detect(names(df4), "BAQ")], na.rm = TRUE)
df4$PBCS <- rowMeans(df4[,str_detect(names(df4), "PBCS")], na.rm = TRUE)
df4$BRS <- rowMeans(df4[,str_detect(names(df4), "BRS")], na.rm = TRUE)
df8a$BPQ_A <- -1*normalize(df8a$BPQ_A)

rez_body <- rbind(
  # df2
  make_cor(df2, vars_intero, with = "BPQ_A", component="Body") |>
    mutate(var_Correlate = "Body Awareness (BPQ)"),
  make_cor(df2, vars_intero, with = "BPQ_R", component="Body") |>
    mutate(var_Correlate = "Autonomic Reactivity (BPQ)"),
  make_cor(df2, vars_intero, with = "ICQ", component="Body") |>
    mutate(var_Correlate = "Interoceptive Confusion (ICQ)"),
  # df3
  make_cor(df3, vars_intero, with = "BPQ_BodyAwareness", component="Body") |>
    mutate(var_Correlate = "Body Awareness (BPQ)"),
  make_cor(df3, vars_intero, with = "BPQ_AutonomicReactivity", component="Body") |>
    mutate(var_Correlate = "Autonomic Reactivity (BPQ)"),
  # df4
  make_cor(df4, vars_intero, with = "BPQ_A", component="Body") |>
    mutate(var_Correlate = "Body Awareness (BPQ)"),
  make_cor(df4, vars_intero, with = "BAQ", component="Body") |>
    mutate(var_Correlate = "Body Awareness (BAQ)"),
  make_cor(df4, vars_intero, with = "PBCS", component="Body") |>
    mutate(var_Correlate = "Body Consciousness (PBCS)"),
  make_cor(df4, vars_intero, with = "BRS", component="Body") |>
    mutate(var_Correlate = "Body Responsiveness (BRS)"),
  # df 6
  make_cor(df6, vars_intero, with = "IATS_sum", component="Body") |>
    mutate(var_Correlate = "Interoceptive Attention (IATS)"),
  make_cor(df6, vars_intero, with = "SSS8_sum", component="Body") |>
    mutate(var_Correlate = "Somatic Burden (SSS-8)"),
  # df 7b
  make_cor(df7b, vars_intero, with = "BPQ_Sum", component="Body") |>
    mutate(var_Correlate = "Body Awareness (BPQ)"),
  make_cor(df7b, vars_intero, with = "PHQ15_Sum", component="Mood") |>
    mutate(var_Correlate = "Somatic Concerns (PHQ-15)"),
  # df 7c
  make_cor(df7c, vars_intero, with = "BPQ_sum", component="Body") |>
    mutate(var_Correlate = "Body Awareness (BPQ)"),
  make_cor(df7c, vars_intero, with = "ICQ_sum", component="Body") |>
    mutate(var_Correlate = "Interoceptive Confusion (ICQ)"),
  # df8a
  make_cor(df8a, vars_intero, with = "BPQ_A", component="Body") |>
    mutate(var_Correlate = "Body Awareness (BPQ)"),
  make_cor(df8a, vars_intero, with = "EDI_IA", component="Body") |>
    mutate(var_Correlate = "Interoceptive Awareness (EDI)")
)

display_sig(rez_body)

Alexithymia

Code
# names(df2)[str_detect(names(df2), "TAS")]
# names(df3)[str_starts(names(df3), "TAS")]
# names(df7c)[str_starts(names(df7c), "TAS")]
# names(df8b)[str_starts(names(df8b), "TAS")]

rez_alexi <- rbind(
  make_cor(df2, vars_intero, with = "TAS_DIF", component="Alexithymia") |>
    mutate(var_Correlate = "Diff. Identifying Feelings (TAS)"),
  make_cor(df2, vars_intero, with = "TAS_DDF", component="Alexithymia") |>
    mutate(var_Correlate = "Diff. Describing Feelings (TAS)"),
  make_cor(df2, vars_intero, with = "TAS_EOT", component="Alexithymia") |>
    mutate(var_Correlate = "External Thinking (TAS)"),
  make_cor(df3, vars_intero, with = "TAS_DescribingFeelings", component="Alexithymia") |>
    mutate(var_Correlate = "Diff. Describing Feelings (TAS)"),
  make_cor(df3, vars_intero, with = "TAS_IdentifyingFeelings", component="Alexithymia") |> 
    mutate(var_Correlate = "Diff. Identifying Feelings (TAS)"),
  make_cor(df3, vars_intero, with = "TAS_ExternallyOrientedThinking", component="Alexithymia") |>
    mutate(var_Correlate = "External Thinking (TAS)"),
  make_cor(df7c, vars_intero, with = "TAS_des", component="Alexithymia") |>
    mutate(var_Correlate = "Diff. Describing Feelings (TAS)"),
  make_cor(df7c, vars_intero, with = "TAS_ident", component="Alexithymia") |>
    mutate(var_Correlate = "Diff. Identifying Feelings (TAS)"),
  make_cor(df7c, vars_intero, with = "TAS_ext", component="Alexithymia") |>
    mutate(var_Correlate = "External Thinking (TAS)"),
  make_cor(df8b, vars_intero, with = "TAS_DIF", component="Alexithymia") |>
    mutate(var_Correlate = "Diff. Identifying Feelings (TAS)"),
  make_cor(df8b, vars_intero, with = "TAS_DDF", component="Alexithymia") |>
    mutate(var_Correlate = "Diff. Describing Feelings (TAS)"),
  # BVAQ
  make_cor(df2, vars_intero, with = "BVAQ_Affective", component="Alexithymia") |>
    mutate(var_Correlate = "Affective (BVAQ)"),
  make_cor(df2, vars_intero, with = "BVAQ_Cognitive", component="Alexithymia") |>
    mutate(var_Correlate = "Cognitive (BVAQ)")
)

display_sig(rez_alexi)

Mood

Depression

Code
# names(df6)[str_detect(names(df6), "PHQ")] 
# names(df7a)[str_detect(names(df7aa), "PHQ")]
# names(df7b)[str_detect(names(df7b), "PHQ")]
# names(df7c)[str_detect(names(df7c), "BDI")]
# names(df8b)[str_detect(names(df8b), "PHQ")]
# names(df9)

rez_dep <- rbind(
  make_cor(df6, vars_intero, with = "PHQ2_sum", component="Mood") |>
    mutate(var_Correlate = "Depression (PHQ-2)"),
  make_cor(df7a, vars_intero, with = "CES_SUM", component="Mood")|>
    mutate(var_Correlate = "Depression (CES)"),
  make_cor(df7b, vars_intero, with = "PHQ9_Sum", component="Mood")|>
    mutate(var_Correlate = "Depression (PHQ-9)"),
  make_cor(df7c, vars_intero, with = "BDI_sum", component="Mood") |>
    mutate(var_Correlate = "Depression (BDI)"),
  make_cor(df8b, vars_intero, with = "PHQ15_sum", component="Mood") |>
    mutate(var_Correlate = "Somatic Concerns (PHQ-15)"),
  make_cor(df8b, vars_intero, with = "PHQ9_sum", component="Mood") |>
    mutate(var_Correlate = "Depression (PHQ-9)"),
  make_cor(df10a, vars_intero, with = "PHQ4_Depression", component="Mood") |>
    mutate(var_Correlate = "Depression (PHQ-2)"),
  make_cor(df10b, vars_intero, with = "BDI2_Total", component="Mood") |>
    mutate(var_Correlate = "Depression (BDI)")
)

display_sig(rez_dep)

Anxiety

Code
# names(df6)[str_detect(names(df6), "GAD")] 
# names(df7a)[str_detect(names(df7a), "STAI")] 
# names(df7b)[str_detect(names(df7b), "STAI")] 
# names(df7c)[str_detect(names(df7c), "STAI")]

rez_anx <- rbind(
  make_cor(df6, vars_intero, with = "GAD2_sum", component="Mood") |>
    mutate(var_Correlate = "Anxiety (GAD-2)"),
  make_cor(df7a, vars_intero, with = "STAI_T_Sumscore", component="Mood") |>
    mutate(var_Correlate = "Anxiety (STAI)"),
  make_cor(df7b, vars_intero, with = "STAIT_Sum", component="Mood") |>
    mutate(var_Correlate = "Anxiety (STAI)"),
  make_cor(df7c, vars_intero, with = "STAIT_sum", component="Mood") |>
    mutate(var_Correlate = "Anxiety (STAI)"),
  make_cor(df10a, vars_intero, with = "PHQ4_Anxiety", component="Mood") |>
    mutate(var_Correlate = "Anxiety (GAD-2)"),
  make_cor(df10b, vars_intero, with = "PHQ4_Anxiety", component="Mood") |>
    mutate(var_Correlate = "Anxiety (GAD-2)"),
  make_cor(df10b, vars_intero, with = "STAI5_General", component="Mood") |>
    mutate(var_Correlate = "Anxiety (STAI)")
)

display_sig(rez_anx)

Psychopathology

Code
rez_pid <- rbind(
  make_cor(df10a, vars_intero, with = "PID5_Antagonism", component="Maladaptive") |>
    mutate(var_Correlate = "Antagonism"),
  make_cor(df10a, vars_intero, with = "PID5_Detachment", component="Maladaptive") |>
    mutate(var_Correlate = "Detachment"),
  make_cor(df10a, vars_intero, with = "PID5_Disinhibition", component="Maladaptive") |>
    mutate(var_Correlate = "Disinhibition"),
  make_cor(df10a, vars_intero, with = "PID5_NegativeAffect", component="Maladaptive") |>
    mutate(var_Correlate = "Negative Affect"),
  make_cor(df10a, vars_intero, with = "PID5_Psychoticism", component="Maladaptive") |>
    mutate(var_Correlate = "Psychoticism")
)

display_sig(rez_pid)
Code
rez_spq <- rbind(
  make_cor(df10a, vars_intero, with = "SPQ_ConstrictedAffect", component="Schizotypic") |>
    mutate(var_Correlate = "Constricted Affect"),
  make_cor(df10a, vars_intero, with = "SPQ_Eccentric", component="Schizotypic") |>
    mutate(var_Correlate = "Eccentric"),
  make_cor(df10a, vars_intero, with = "SPQ_MagicalThinking", component="Schizotypic") |>
    mutate(var_Correlate = "Magical Thinking"),
  make_cor(df10a, vars_intero, with = "SPQ_NoCloseFriends", component="Schizotypic") |>
    mutate(var_Correlate = "No Close Friends"),
  make_cor(df10a, vars_intero, with = "SPQ_OddSpeech", component="Schizotypic") |>
    mutate(var_Correlate = "Odd Speech"),
  make_cor(df10a, vars_intero, with = "SPQ_Reference", component="Schizotypic") |>
    mutate(var_Correlate = "Reference"),
  make_cor(df10a, vars_intero, with = "SPQ_SocialAnxiety", component="Schizotypic") |>
    mutate(var_Correlate = "Social Anxiety"),
  make_cor(df10a, vars_intero, with = "SPQ_Suspiciousness", component="Schizotypic") |>
    mutate(var_Correlate = "Suspiciousness"),
  make_cor(df10a, vars_intero, with = "SPQ_UnusualPerceptions", component="Schizotypic") |>
    mutate(var_Correlate = "Unusual Perceptions")
)

display_sig(rez_spq)
Code
#  names(select(df10a, starts_with("ASQ")))
rez_asq <- rbind(
  make_cor(df10a, vars_intero, with = "ASQ_Imagination", component="Autistic") |>
    mutate(var_Correlate = "Imagination"),
  make_cor(df10a, vars_intero, with = "ASQ_LackSocialSkills", component="Autistic") |>
    mutate(var_Correlate = "Lack of Social Skills"),
  make_cor(df10a, vars_intero, with = "ASQ_LowAttentionalSwitching", component="Autistic") |>
    mutate(var_Correlate = "Low Attentional Switching"),
  make_cor(df10a, vars_intero, with = "ASQ_Patterns", component="Autistic") |>
    mutate(var_Correlate = "Patterns and Numbers"),
  make_cor(df10a, vars_intero, with = "ASQ_Routine", component="Autistic") |>
    mutate(var_Correlate = "Routines")
)

display_sig(rez_asq)

Personality

Code
# names(df7a)[str_detect(names(df7a), "NEO")]
# names(df9)[str_detect(names(df9), "BFI_")]

rez_pers <- rbind(
  make_cor(df7a, vars_intero, with = "NEO_FFI_SUMSCORE", component="Personality") |>
    mutate(var_Correlate = "Neuroticism"),
  make_cor(df9, vars_intero, with = "BFI_AGREEABLENESS", component="Personality") |>
    mutate(var_Correlate = "Agreeableness"),
  make_cor(df9, vars_intero, with = "BFI_CONSCIENTIOUSNESS", component="Personality") |>
    mutate(var_Correlate = "Conscientiousness"),
  make_cor(df9, vars_intero, with = "BFI_NEUROTICISM", component="Personality") |>
    mutate(var_Correlate = "Neuroticism"),
  make_cor(df9, vars_intero, with = "BFI_OPENNESS", component="Personality") |>
    mutate(var_Correlate = "Openness"),
  make_cor(df9, vars_intero, with = "BFI_EXTROVERSION", component="Personality") |>
    mutate(var_Correlate = "Extraversion"),
  make_cor(df10a, vars_intero, with = "IPIP6_Agreeableness", component="Personality") |>
    mutate(var_Correlate = "Agreeableness"),
  make_cor(df10a, vars_intero, with = "IPIP6_Conscientiousness", component="Personality") |>
    mutate(var_Correlate = "Conscientiousness"),
  make_cor(df10a, vars_intero, with = "IPIP6_Neuroticism", component="Personality") |>
    mutate(var_Correlate = "Neuroticism"),
  make_cor(df10a, vars_intero, with = "IPIP6_Openness", component="Personality") |>
    mutate(var_Correlate = "Openness"),
  make_cor(df10a, vars_intero, with = "IPIP6_Extraversion", component="Personality") |>
    mutate(var_Correlate = "Extraversion"),
  make_cor(df10a, vars_intero, with = "IPIP6_HonestyHumility", component="Personality") |>
    mutate(var_Correlate = "Honesty-Humility")
)

display_sig(rez_pers)

Others

Code
# names(df7a)[str_detect(names(df7a), "FFMQ")]

rez_ffmq <- rbind(
  make_cor(df7a, vars_intero, with = "FFMQ_OBSERVATION", component="Mindfulness") |>
    mutate(var_Correlate = "Observation (FFMQ)"),
  make_cor(df7a, vars_intero, with = "FFMQ_DESCRIPTION", component="Mindfulness") |>
    mutate(var_Correlate = "Description (FFMQ)")
)

display_sig(rez_ffmq)
Code
# names(df9)[str_detect(names(df9), "UCLA")]
# names(df9)[str_detect(names(df9), "EQ")]
df9$EQ <- rowMeans(select(df9, starts_with("EQ")))

rez_social <- rbind(
  make_cor(df9, vars_intero, with = "UCLA_TOTAL", component="Interpersonal") |>
    mutate(var_Correlate = "Loneliness (UCLA)"),
  make_cor(df9, vars_intero, with = "EQ", component="Interpersonal") |>
    mutate(var_Correlate = "Empathy (EQ)"),
  make_cor(df9, vars_intero, with = "ECR_ANXIETY", component="Interpersonal") |>
    mutate(var_Correlate = "Relationship Anxiety (ECR)"),
  make_cor(df9, vars_intero, with = "ECR_AVOIDANCE", component="Interpersonal") |>
    mutate(var_Correlate = "Relationship Avoidance (ECR)"),
  make_cor(df10a, vars_intero, with = "BPD", component="Interpersonal") |>
    mutate(var_Correlate = "Boderline Personality")
)

display_sig(rez_social)
Code
rez_pi <- rbind(
  make_cor(df10a, vars_intero, with = "PI_Alive", component="World Beliefs") |>
    mutate(var_Correlate = "Alive"),
  make_cor(df10a, vars_intero, with = "PI_Changing", component="World Beliefs") |>
    mutate(var_Correlate = "Changing"),
  make_cor(df10a, vars_intero, with = "PI_Enticing", component="World Beliefs") |>
    mutate(var_Correlate = "Enticing"),
  make_cor(df10a, vars_intero, with = "PI_Good", component="World Beliefs") |>
    mutate(var_Correlate = "Good"),
  make_cor(df10a, vars_intero, with = "PI_Hierarchical", component="World Beliefs") |>
    mutate(var_Correlate = "Hierarchical"),
  make_cor(df10a, vars_intero, with = "PI_Safe", component="World Beliefs") |>
    mutate(var_Correlate = "Safe"),
  make_cor(df10a, vars_intero, with = "PI_Understandable", component="World Beliefs") |>
    mutate(var_Correlate = "Understandable")
)

display_sig(rez_pi)
Code
rez_gcbs <- rbind(
  make_cor(df10a, vars_intero, with = "GCBS_Extraterrestrial", component="Conspiracy") |>
    mutate(var_Correlate = "Extraterrestrial"),
  make_cor(df10a, vars_intero, with = "GCBS_GlobalConspiracies", component="Conspiracy") |>
    mutate(var_Correlate = "Global Conspiracies"),
  make_cor(df10a, vars_intero, with = "GCBS_GovernmentMalfeasance", component="Conspiracy") |>
    mutate(var_Correlate = "Government Malfeasance"),
  make_cor(df10a, vars_intero, with = "GCBS_InformationControl", component="Conspiracy") |>
    mutate(var_Correlate = "Information Control"),
  make_cor(df10a, vars_intero, with = "GCBS_PersonalWellbeing", component="Conspiracy") |>
    mutate(var_Correlate = "Personal Wellbeing")
)

display_sig(rez_gcbs)
Code
rez_lie <- rbind(
  make_cor(df10a, vars_intero, with = "LIE_Ability", component="Lying Profile") |>
    mutate(var_Correlate = "Ability"),
  make_cor(df10a, vars_intero, with = "LIE_Frequency", component="Lying Profile") |>
    mutate(var_Correlate = "Frequency"),
  make_cor(df10a, vars_intero, with = "LIE_Contextuality", component="Lying Profile") |>
    mutate(var_Correlate = "Contextuality"),
  make_cor(df10a, vars_intero, with = "LIE_Negativity", component="Lying Profile") |>
    mutate(var_Correlate = "Negativity")
)

display_sig(rez_lie)

Summary

Code
data <- rbind(
  rez_gender,
  rez_age,
  rez_maia,
  rez_body,
  rez_alexi,
  rez_dep,
  rez_anx,
  rez_spq,
  rez_asq,
  rez_pid,
  rez_social,
  rez_pers,
  rez_ffmq,
  rez_pi,
  rez_gcbs,
  rez_lie
)


p <- data |>
  mutate(sig = ifelse(p < .01, "p < .01", ifelse(p < .001, "p < .001", "N.S.")),
         dir = sign(r),
         var_Interoception = str_replace(var_Interoception, "CoughSneeze", "Cough/Sneeze"),
         var_Interoception = str_replace(var_Interoception, "HeartBreathing", "Heart/Breathing"),
         var_Interoception = str_replace(var_Interoception, "HungryThirsty", "Hungry/Thirsty"),
         var_Interoception = str_replace(var_Interoception, "ItchBruise", "Itch/Bruise"),
         var_Interoception = str_replace(var_Interoception, "MusclesPain", "Muscles/Pain"),
         var_Interoception = str_replace(var_Interoception, "UrinateDefecate", "Urinate/Defecate"),
         var_Interoception = str_replace(var_Interoception, "WindBurp", "Wind/Burp"),
         var_Interoception = str_replace(var_Interoception, "Expulsion_Sudden", "Expulsion - Sudden"),
         var_Interoception = fct_relevel(var_Interoception, "Heart/Breathing", "Muscles/Pain", "Itch/Bruise", "Hungry/Thirsty", "Urinate/Defecate", "Wind/Burp", "Cough/Sneeze"),
         Component = fct_relevel(
           Component, "Demographic", "MAIA", "Body", "Alexithymia", "Mood", "Maladaptive",
           "Schizotypic", "Autistic", "Interpersonal", "Personality", "Conspiracy", "World Beliefs", "Lying Profile", "Mindfulness")) |>
  ggplot(aes(y = var_Correlate)) +
  geom_vline(xintercept = 0, linetype = "dashed") +
  # geom_bar(aes(fill=Sample, alpha=sig, y=r, group=Sample), stat="identity", position = position_dodge2(width = 0.8)) +
  geom_linerange(aes(color=dir, alpha=sig, xmin=0, xmax=r, group=Sample), position = position_dodge2(width = 0.7), linewidth=2) +
  geom_linerange(aes(xmin = CI_low, xmax = CI_high, color = dir, alpha=sig, group=Sample), position = position_dodge2(width = 0.7)) +
  scale_fill_gradient(low = "#2196F3", high = "#FF5722", guide = "none") +
  scale_color_gradient(low = "#2196F3", high = "#FF5722", guide = "none") +
  scale_alpha_discrete(range = c(0.2, 0.7), guide = "none") +
  scale_x_continuous(expand = c(0, 0), breaks = c(-0.3, 0, 0.3)) +
  facet_grid(Component ~ var_Interoception, scales = "free_y", switch = "y") +
  coord_cartesian(xlim = c(-0.45, 0.45)) +
  theme_modern(axis.title.space = 5) +
  # labs(x = "Correlation", title="Correlates of the Interoceptive Accuracy Scale (IAS)") +
  theme(panel.grid.major.y = element_line(),
        axis.title.y = element_blank(),
        axis.title.x = element_blank(),
        axis.line.x = element_blank(),
        axis.text.y = element_text(size = rel(0.5)),
        axis.text.x = element_text(size = rel(0.8)),
        plot.title = element_text(face = "bold", hjust = 0),
        strip.placement = "outside",
        strip.background.y = element_rect(fill = "#E0E0E0", color = "white"),
        strip.background.x = element_rect(fill = "#F8BBD0", color = "white"))
Warning: Using alpha for a discrete variable is not advised.
Code
p

Subjective Correlates of the Interoceptive Accuracy Scale (IAS). Each bar represents one sample (total N = TODO), and different samples using the same measures are grouped together, providing an intuition of the general trend. Blue and red bars represent positive and negative correlations, respectively, with their 95% CI. Transparent bars indicate non-significant correlations (p > .05).
Code
ggsave("figures/Figure2.png", p, width=21*0.45, height=29.7*0.45, dpi=200, bg="white")